package org.ewaf.framework.service;

import java.util.List;

import org.ewaf.framework.dao.IBaseDao;
import org.ewaf.framework.model.IDataObject;
import org.ewaf.framework.model.ListModel;
import org.springframework.transaction.support.TransactionTemplate;



public class BaseService {
	
	/**
	 * 事务模板
	 * 
	 * <PRE>
	 * 使用示例1：
	 * transactionTemplate.execute(new TransactionCallback() {
	 *		public Object doInTransaction(TransactionStatus status) {
	 *			if (要回滚) {
	 *				throw RuntimeException或其子异常;
	 *			}
	 *			
	 *			return 正常返回值;
	 *		}
	 *	});
	 *
	 * 使用示例2：
	 * result = transactionTemplate.execute(new TransactionCallback() {
	 *		public Object doInTransaction(TransactionStatus status) {
	 *			if (要回滚) {
	 *				status.setRollbackOnly();
	 *				return 表示失败的返回值;
	 *			}
	 *			
	 *			return 表示成功的返回值;
	 *		}
	 *	});
	 * </PRE>
	 */
	protected TransactionTemplate transactionTemplate;
	
	public void setTransactionTemplate(TransactionTemplate transactionTemplate) {
		this.transactionTemplate = transactionTemplate;
	}
	
	protected IBaseDao dao;

	public void setDao(IBaseDao dao) {
		this.dao = dao;
	}
	
	/**
	 * 创建一个业务对象
	 * 返回业务对象主键
	 */
	public void create(IDataObject data) {
		dao.create(data);
	}
	
	/**
	 * 更新一个业务对象
	 */
	public void update(IDataObject data) {
		dao.update(data);
	}
	
	/**
	 * 根据主键删除单个业务对象
	 */
	public void deleteById(Object id) {
		dao.deleteById(id);
	}
	
	/**
	 * 查询符合指定条件的业务对象总数
	 */
	public int count(ListModel listModel) {
		return dao.countByCondition(listModel);
	}
	
	/**
	 * 查询符合指定条件的业务对象
	 */
	public List<IDataObject> query(ListModel listModel) {
		return dao.query(listModel);
	}
	
	/**
	 * 根据主键获得单个业务对象
	 */
	public IDataObject getById(Object id) {
		return dao.getById(id);
	}
	
	/**
	 * 根据主键获得多个业务对象
	 */
	public List<IDataObject> getByIds(Object[] ids) {
		return dao.getByIds(ids);
	}
	
	/**
	 * 根据主键获得多个业务对象
	 */
	public List<IDataObject> getByIdList(List<?> idList) {
		return dao.getByIdList(idList);
	}
	
}
